﻿using System.Collections.Generic;
using NHibernate.Criterion;
using TestBat.IModels.Domain;

namespace TestBat.IModels.Repositories
{
    public interface IRepository<O, ID> where O : IDomainEntity
    {
        void MakePersistent(O o);
        void MakeTransient(O o);
        void Refresh(O o);

        O GetByID(ID ID);

        IList<O> GetAll();
        IList<O> GetAllOrderedBy(string column, bool ascending);
        IList<T> GetByCriteria<T>(DetachedCriteria criteria) where T : class, O;
        IList<T> GetBySubtype<T>() where T : class, O;

        IList<O> GetBySQL(string sql);
    }
}
